/*  Copyright (c) 2010 Xiaoyun Zhu
 * 
 *  Permission is hereby granted, free of charge, to any person obtaining a copy  
 *  of this software and associated documentation files (the "Software"), to deal  
 *  in the Software without restriction, including without limitation the rights  
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell  
 *  copies of the Software, and to permit persons to whom the Software is  
 *  furnished to do so, subject to the following conditions:
 *  
 *  The above copyright notice and this permission notice shall be included in  
 *  all copies or substantial portions of the Software.
 *  
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE  
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN  
 *  THE SOFTWARE.  
 */
package cn.kk.kkdict.extraction.dict;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import cn.kk.kkdict.Configuration;
import cn.kk.kkdict.Configuration.Source;
import cn.kk.kkdict.types.Category;
import cn.kk.kkdict.types.Language;
import cn.kk.kkdict.types.TranslationSource;
import cn.kk.kkdict.types.Usage;
import cn.kk.kkdict.types.WordType;
import cn.kk.kkdict.utils.Helper;

/**
 * Download: http://www.chine-informations.com/chinois/open/CFDICT/
 * 
 * @author x_kez
 * 
 */
public class EdictZhFrExtractor extends EdictZhDeExtractor {
  public static final String   EDICT_FILE               = Configuration.IMPORTER_FOLDER_SELECTED_DICTS.getFile(Source.DICT_EDICT, "cfdict.u8");

  public static final String   OUT_DIR                  = Configuration.IMPORTER_FOLDER_EXTRACTED_DICTS.getPath(Source.DICT_EDICT);

  public static final String[] IRRELEVANT_WORDS_STRINGS = {};

  public static void main(final String args[]) throws IOException {
    final Map<String, EdictCategory> categoriesMap = new HashMap<String, EdictCategory>();
    final CategoryImpl[] values = CategoryImpl.values();
    for (int i = 0; i < values.length; i++) {
      final CategoryImpl c = values[i];
      categoriesMap.put(c.getConstantName(), c);
    }
    new EdictZhFrExtractor().extractDict(TranslationSource.EDICT_ZH_FR, EdictZhFrExtractor.EDICT_FILE, Helper.CHARSET_UTF8, EdictZhFrExtractor.OUT_DIR,
        Language.ZH, Language.FR, categoriesMap, EdictZhFrExtractor.IRRELEVANT_WORDS_STRINGS);
  }

  public static enum CategoryImpl implements EdictZhDeExtractor.EdictCategory {
    Abbasside(null, null),
    Antiquité(null, null),
    Athènes(null, null),
    Banque_mondiale(null, null),
    Berlin(null, null),
    Bosnie_Herzégovine(null, null),
    Caisse_des_pensions(null, null),
    Caroline_du_Nord(null, null),
    Côte_d_Ivoire(null, null),
    DGACM(null, null),
    District_de_Columbia(null, null),
    Etats_Unis(null, null),
    FMI(null, null),
    Fidji(null, null),
    Géorgie(null, null),
    HTTP(null, null),
    Huai_an(null, null),
    Iowa(null, null),
    Israël(null, null),
    Linyi(null, null),
    Londres(null, null),
    Macao(null, null),
    Montana(null, null),
    NHOH(null, null),
    New_Hampshire(null, null),
    Ningbo(null, null),
    Népal(null, null),
    OACI(null, null),
    Ontario(null, null),
    Paraguay(null, null),
    Putian(null, null),
    Pékin(null, null),
    Seconde_Guerre_mondiale(null, null),
    Seychelles(null, null),
    Shanghaïen(null, null),
    Sibley(null, null),
    Sienne(null, null),
    Somalie(null, null),
    TEP(null, null),
    TPIR(null, null),
    Transformers(null, null),
    Utah(null, null),
    Vermont(null, null),
    Vienne(null, null),
    Virginie(null, null),
    Xiangfan(null, null),
    accessoire(null, null),
    actrice(null, null),
    amas_globulaire(null, null),
    amt(null, null),
    ancien_nom(null, null),
    antiquité(null, null),
    appareil(null, null),
    appareil_de_mesure(null, null),
    arc_en_ciel(null, null),
    architecte(null, null),
    arithmétique(null, null),
    armée_américaine(null, null),
    armée_française(null, null),
    astrologie_chinoise(null, null),
    astronautique(null, null),
    aéroport(null, null),
    banques(null, null),
    bus(null, null),
    cerveau(null, null),
    cocktail(null, null),
    comme(null, null),
    concret(null, null),
    construction(null, null),
    conte(null, null),
    court_métrage(null, null),
    cristallographie(null, null),
    croiseur(null, null),
    créature_fantastique(null, null),
    cuisson(null, null),
    culture(null, null),
    d_un_animal(null, null),
    d_un_document(null, null),
    d_un_médicament(null, null),
    d_une_femme(null, null),
    d_une_maladie(null, null),
    dans_les_temps_anciens(null, null),
    dans_un_jeu(null, null),
    dans_un_restaurant(null, null),
    de_fruit(null, null),
    de_porc(null, null),
    de_production(null, null),
    dent(null, null),
    diminutif(null, null),
    droit_français(null, null),
    déchet(null, null),
    en_banque(null, null),
    en_calcul(null, null),
    en_cuisine(null, null),
    en_particulier_dans_le_théâtre_Yuan(null, null),
    esprit(null, null),
    faire(null, null),
    fig(null, null),
    figuratif(null, null),
    finale(null, null),
    flore(null, null),
    forme_anti_fraude(null, null),
    fromage(null, null),
    fête(null, null),
    fête_chinoise(null, null),
    genre_végétal(null, null),
    gravure(null, null),
    groupe_ethnique(null, null),
    homme_politique(null, null),
    hors_classe(null, null),
    hôpitaux(null, null),
    industrielles(null, null),
    internet(null, null),
    jeu_de_cartes(null, null),
    jeu_de_rôle(null, null),
    kHz(null, null),
    la(null, null),
    les_yeux(null, null),
    logiciel(null, null),
    machine(null, null),
    matériel(null, null),
    missions_politiques_spéciales(null, null),
    modélisation(null, null),
    mot_antique(null, null),
    musculation(null, null),
    médecine_traditionnelle_chinoise(null, null),
    métro_de_Londres(null, null),
    navigateur(null, null),
    navigation(null, null),
    nom_d_un_col(null, null),
    nouvelle(null, null),
    organisations(null, null),
    organisme(null, null),
    os(null, null),
    papillon(null, null),
    parapsychologie(null, null),
    peu_employé(null, null),
    photographie(null, null),
    phénomène_optique(null, null),
    poids_de_matières_dissoutes_dans_l_unité_de_volume_de_solution(null, null),
    poids_de_sel_dissous_contenu_dans_un_volume_d_eau(null, null),
    police(null, null),
    pour_les_animaux(null, null),
    prince(null, null),
    probabilités(null, null),
    profession_maritime(null, null),
    province_romaine(null, null),
    psychanalyse(null, null),
    péjoratif(null, null),
    qui(null, null),
    quoi(null, null),
    radio(null, null),
    respectueux(null, null),
    ressources_humaines(null, null),
    rhétorique(null, null),
    roche(null, null),
    royaume(null, null),
    récipient(null, null),
    réseau(null, null),
    satellite(null, null),
    sculpture(null, null),
    signe_astrologique(null, null),
    son(null, null),
    spectacle(null, null),
    surnaturel(null, null),
    taoïsme(null, null),
    tennis(null, null),
    travail(null, null),
    tribunaux(null, null),
    un_enfant(null, null),
    un_médicament(null, Category.TYPE_ID + Category.MEDICINE.key),
    un_rôle(null, null),
    une_femme(null, null),
    unité_de_mesure(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    vêtements(null, Category.TYPE_ID + Category.COSMETICS.key),
    à_Pékin(null, null),
    à_l_hôpital(null, null),
    écorce(null, null),
    édifice(null, null),
    éducation(null, Category.TYPE_ID + Category.EDUCATION.key),
    électrique(null, Category.TYPE_ID + Category.PHYSICS.key),
    énergie(null, Category.TYPE_ID + Category.PHYSICS.key),
    épice(null, null),
    équipement(null, null),
    établissement(null, null),
    Beijing(null, null),
    Bolivie(null, null),
    CEA(null, null),
    CIJ(null, null),
    Chicago(null, null),
    Colorado(null, null),
    DPKO(null, null),
    ISO(null, null),
    Inde(null, null),
    Indiana(null, null),
    Jinan(null, Category.TYPE_ID + Category.NAME.key),
    Nebraska(null, null),
    New_Jersey(null, null),
    Nouvelle_Zélande(null, null),
    Rhode_Island(null, Category.TYPE_ID + Category.NAME.key),
    Rome(null, null),
    Rome_antique(null, null),
    Shakespeare(null, null),
    TPIY(null, null),
    Terre_du_Milieu(null, null),
    Tianjin(null, Category.TYPE_ID + Category.NAME.key),
    Titan(null, null),
    UNCLOS(null, null),
    Wisconsin(null, null),
    Wuhan(null, Category.TYPE_ID + Category.NAME.key),
    Xi_an(null, Category.TYPE_ID + Category.NAME.key),
    Yangzhou(null, Category.TYPE_ID + Category.NAME.key),
    activité(null, null),
    anime(null, null),
    arbre(null, Category.TYPE_ID + Category.PLANTS.key),
    argent(null, null),
    art(null, null),
    cantonais(null, null),
    chanson(null, Category.TYPE_ID + Category.MUSIC.key),
    classe_sociale(null, null),
    comédie_musicale(null, null),
    cyclisme(null, null),
    d_un_film(null, null),
    de_guerre(null, null),
    diplomatie(null, null),
    document(null, null),
    e(null, null),
    empereur_byzantin(null, null),
    en(null, null),
    en_informatique(null, Category.TYPE_ID + Category.SOFTWARE.key),
    footballeur(null, Category.TYPE_ID + Category.SPORTS.key),
    forces_aériennes(null, null),
    formel(null, null),
    fusée(null, null),
    graphique(null, Category.TYPE_ID + Category.GEOGRAPHY.key),
    génétique(null, null),
    histoire(null, Category.TYPE_ID + Category.HISTORY.key),
    homme(null, null),
    homosexualité(null, null),
    le_plus_fréquent(null, null),
    marine(null, Category.TYPE_ID + Category.MARITIME.key),
    matière(null, null),
    moteur(null, null),
    mythologie_grecque(null, null),
    métro_de_Paris(null, null),
    npl(null, null),
    nom_officieux(null, null),
    néol(null, null),
    objet(null, null),
    oblast(null, null),
    papeterie(null, null),
    phrase(null, null),
    pour_une_femme(null, null),
    psycho_social(null, Category.TYPE_ID + Category.PSYCHOLOGY.key),
    psychologie(null, Category.TYPE_ID + Category.PSYCHOLOGY.key),
    roi(null, null),
    sentiment(null, null),
    sismique(null, null),
    socio_écon(null, null),
    sports(null, Category.TYPE_ID + Category.SPORTS.key),
    structure_de_données(null, null),
    train(null, Category.TYPE_ID + Category.RAILWAYS.key),
    télescope_spatial(null, null),
    une_maladie(null, Category.TYPE_ID + Category.MEDICINE.key),
    voiture(null, Category.TYPE_ID + Category.AUTOMOBILE.key),
    véhicule(null, Category.TYPE_ID + Category.AUTOMOBILE.key),
    zoologie(null, Category.TYPE_ID + Category.ANIMALS.key),
    écologie(null, Category.TYPE_ID + Category.GEOGRAPHY.key),
    écrivain(null, Category.TYPE_ID + Category.LITERATURE.key),
    Arkansas(null, Category.TYPE_ID + Category.NAME.key),
    Colombie_Britannique(null, null),
    Corée(null, null),
    FAO(null, null),
    Indonésie(null, Category.TYPE_ID + Category.NAME.key),
    Internet(null, null),
    Maine(null, Category.TYPE_ID + Category.NAME.key),
    Mississippi(null, Category.TYPE_ID + Category.NAME.key),
    Naruto(null, Category.TYPE_ID + Category.HOBBY.key),
    Pakistan(null, Category.TYPE_ID + Category.NAME.key),
    Star_Trek(null, Category.TYPE_ID + Category.MEDIA.key),
    Suisse(null, Category.TYPE_ID + Category.NAME.key),
    Tibet(null, Category.TYPE_ID + Category.NAME.key),
    Tokyo(null, Category.TYPE_ID + Category.NAME.key),
    US(null, Category.TYPE_ID + Category.NAME.key),
    USA(null, Category.TYPE_ID + Category.NAME.key),
    algèbre(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    archaïque(null, Category.TYPE_ID + Category.HISTORY.key),
    armement(null, null),
    athlétisme(null, Category.TYPE_ID + Category.SPORTS.key),
    autrefois(null, null),
    bijou(null, Category.TYPE_ID + Category.COSMETICS.key),
    bière(null, Category.TYPE_ID + Category.CUISINE.key),
    chanteuse(null, Category.TYPE_ID + Category.MUSIC.key),
    cheval(null, Category.TYPE_ID + Category.ANIMALS.key),
    christianisme(null, Category.TYPE_ID + Category.RELIGION.key),
    danse(null, Category.TYPE_ID + Category.SPORTS.key),
    de_l_argent(null, null),
    déesse(null, Category.TYPE_ID + Category.MYTHOLOGY.key),
    eau(null, null),
    empereur_romain(null, Category.TYPE_ID + Category.HISTORY.key),
    faire_quelque_chose(null, null),
    honorifique(null, null),
    humain(null, null),
    juridique(null, null),
    maladie(null, Category.TYPE_ID + Category.MEDICINE.key),
    mesure(null, null),
    mil(null, null),
    missile(null, null),
    monstre(null, null),
    métier(null, null),
    nmpl(null, null),
    nucléaire(null, null),
    par_exemple(null, null),
    peinture(null, null),
    personnage(null, null),
    physiologie(null, Category.TYPE_ID + Category.PSYCHOLOGY.key),
    poisson(null, null),
    proverbe(null, null),
    science(null, null),
    sciences_sociales(null, Category.TYPE_ID + Category.SOCIETY.key),
    solfège(null, null),
    spécifique(null, null),
    suffixe(null, null),
    théâtre(null, Category.TYPE_ID + Category.MUSIC.key),
    titre(null, null),
    topographie(null, null),
    une(null, null),
    voix(null, null),
    zone(null, null),
    équitation(null, null),
    AIEA(null, null),
    Mongolie_Intérieure(null, null),
    Norvège(null, null),
    OMP(null, null),
    PNUD(null, null),
    Rhénanie_du_Nord_Westphalie(null, null),
    Taïwan(null, Category.TYPE_ID + Category.NAME.key),
    artillerie(null, Category.TYPE_ID + Category.MILITARY.key),
    avoir(null, null),
    bambou(null, null),
    basket_ball(null, Category.TYPE_ID + Category.SPORTS.key),
    bateau(null, null),
    chien(null, null),
    folklore(null, null),
    galaxie_naine(null, null),
    golf(null, Category.TYPE_ID + Category.SPORTS.key),
    géophysique(null, Category.TYPE_ID + Category.GEOGRAPHY.key),
    hydrographie(null, null),
    idiome(null, null),
    instrument(null, Category.TYPE_ID + Category.MUSIC.key),
    jurid(null, null),
    lettre_grecque(null, null),
    lieu_dit(null, null),
    logique(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    opéra(null, Category.TYPE_ID + Category.MUSIC.key),
    personnel(null, null),
    société(null, Category.TYPE_ID + Category.SOCIETY.key),
    un_film(null, Category.TYPE_ID + Category.MEDIA.key),
    écriture(null, Category.TYPE_ID + Category.LITERATURE.key),
    électronique(null, Category.TYPE_ID + Category.PHYSICS.key),
    Allemagne(null, Category.TYPE_ID + Category.NAME.key),
    Australie(null, Category.TYPE_ID + Category.NAME.key),
    Cambridge(null, Category.TYPE_ID + Category.NAME.key),
    Canada(null, Category.TYPE_ID + Category.NAME.key),
    Fujian(null, Category.TYPE_ID + Category.NAME.key),
    ICTY(null, null),
    III(null, null),
    Land(null, null),
    Royaume_Uni(null, null),
    album(null, null),
    automobile(null, Category.TYPE_ID + Category.AUTOMOBILE.key),
    avion(null, Category.TYPE_ID + Category.AERIAL.key),
    général(null, null),
    immobilier(null, null),
    littéraire(null, Usage.TYPE_ID + Usage.POETIC.key),
    livre(null, Category.TYPE_ID + Category.LITERATURE.key),
    métallurgie(null, null),
    nom_de_lieu(null, Category.TYPE_ID + Category.NAME.key),
    organe(null, Category.TYPE_ID + Category.BIOLOGY.key),
    prophète(null, Category.TYPE_ID + Category.RELIGION.key),
    restauration(null, null),
    statistiques(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    Écosse(null, null),
    à(null, null),
    Espagne(null, Category.TYPE_ID + Category.NAME.key),
    Michigan(null, Category.TYPE_ID + Category.NAME.key),
    Missouri(null, Category.TYPE_ID + Category.NAME.key),
    Nevada(null, Category.TYPE_ID + Category.NAME.key),
    Ohio(null, Category.TYPE_ID + Category.NAME.key),
    animal(null, Category.TYPE_ID + Category.ANIMALS.key),
    aéronautique(null, null),
    district(null, Category.TYPE_ID + Category.NAME.key),
    famille(null, null),
    générique(null, null),
    matériau(null, Category.TYPE_ID + Category.CHEMISTRY.key),
    minéral(null, Category.TYPE_ID + Category.CHEMISTRY.key),
    médecine_chinoise(null, null),
    optique(null, Category.TYPE_ID + Category.COSMETICS.key),
    route(null, null),
    sport(null, Category.TYPE_ID + Category.SPORTS.key),
    temps(null, Category.TYPE_ID + Category.TIME.key),
    topologie(null, null),
    Floride(null, Category.TYPE_ID + Category.NAME.key),
    Guizhou(null, Category.TYPE_ID + Category.NAME.key),
    Hong_Kong(null, Category.TYPE_ID + Category.NAME.key),
    New_York(null, Category.TYPE_ID + Category.NAME.key),
    Shanghai(null, Category.TYPE_ID + Category.NAME.key),
    Texas(null, Category.TYPE_ID + Category.NAME.key),
    Washington(null, Category.TYPE_ID + Category.NAME.key),
    baseball(null, Category.TYPE_ID + Category.SPORTS.key),
    comté(null, null),
    déminage(null, null),
    femme(null, null),
    institution(null, null),
    natation(null, null),
    nom_usuel(null, null),
    ordinateur(null, null),
    II(null, null),
    Japon(null, Category.TYPE_ID + Category.NAME.key),
    boisson(null, Category.TYPE_ID + Category.CUISINE.key),
    de(null, null),
    football(null, Category.TYPE_ID + Category.SPORTS.key),
    littérature(null, Category.TYPE_ID + Category.LITERATURE.key),
    marque(null, null),
    milit(null, Category.TYPE_ID + Category.MILITARY.key),
    métro_de_Montréal(null, Category.TYPE_ID + Category.RAILWAYS.key),
    n_f(null, WordType.TYPE_ID + WordType.NOUN),
    navire(null, null),
    oiseau(null, Category.TYPE_ID + Category.ANIMALS.key),
    onomatopée(null, null),
    pape(null, null),
    phonétique(null, null),
    sociologie(null, Category.TYPE_ID + Category.SOCIETY.key),
    Arizona(null, Category.TYPE_ID + Category.NAME.key),
    Massachusetts(null, Category.TYPE_ID + Category.NAME.key),
    Math(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    Xinjiang(null, Category.TYPE_ID + Category.NAME.key),
    apôtre(null, Category.TYPE_ID + Category.RELIGION.key),
    astronomie(null, Category.TYPE_ID + Category.ASTRONOMY.key),
    cuisine(null, Category.TYPE_ID + Category.CUISINE.key),
    dialecte(null, null),
    jeu(null, Category.TYPE_ID + Category.GAME.key),
    militaire(null, Category.TYPE_ID + Category.MILITARY.key),
    mécanique(null, Category.TYPE_ID + Category.PHYSICS.key),
    n(null, null),
    prénom(null, Category.TYPE_ID + Category.PEOPLE.key),
    Gansu(null, Category.TYPE_ID + Category.NAME.key),
    Jilin(null, Category.TYPE_ID + Category.NAME.key),
    Russie(null, Category.TYPE_ID + Category.NAME.key),
    autoroute_russe(null, null),
    comptabilité(null, null),
    familier(null, null),
    inv(null, null),
    météorologie(null, Category.TYPE_ID + Category.ASTRONOMY.key),
    nombre(null, null),
    personne(null, Category.TYPE_ID + Category.PEOPLE.key),
    politique(null, Category.TYPE_ID + Category.POLITICS.key),
    vulgaire(null, Usage.TYPE_ID + Usage.VULGAR.key),
    île(null, null),
    Anhui(null, Category.TYPE_ID + Category.NAME.key),
    Heilongjiang(null, Category.TYPE_ID + Category.NAME.key),
    Illinois(null, Category.TYPE_ID + Category.NAME.key),
    Liaoning(null, Category.TYPE_ID + Category.NAME.key),
    Miyazaki(null, Category.TYPE_ID + Category.NAME.key),
    Paris(null, Category.TYPE_ID + Category.NAME.key),
    Shandong(null, Category.TYPE_ID + Category.NAME.key),
    UICPA(null, null),
    UNICEF(null, null),
    arme(null, null),
    groupe(null, null),
    planète(null, Category.TYPE_ID + Category.ASTRONOMY.key),
    Angleterre(null, Category.TYPE_ID + Category.NAME.key),
    Connecticut(null, null),
    Guangxi(null, Category.TYPE_ID + Category.NAME.key),
    architecture(null, Category.TYPE_ID + Category.BUILDING.key),
    bouddhisme(null, Category.TYPE_ID + Category.RELIGION.key),
    géographie(null, Category.TYPE_ID + Category.GEOGRAPHY.key),
    monnaie(null, null),
    outil(null, null),
    patron_de_conception(null, null),
    philosophie(null, Category.TYPE_ID + Category.PHILOSOPHY.key),
    religion(null, Category.TYPE_ID + Category.RELIGION.key),
    Jiangsu(null, Category.TYPE_ID + Category.NAME.key),
    fruit(null, Category.TYPE_ID + Category.PLANTS.key),
    série(null, null),
    État(null, Category.TYPE_ID + Category.NAME.key),
    électricité(null, Category.TYPE_ID + Category.TECHNOLOGY.key),
    France(null, Category.TYPE_ID + Category.NAME.key),
    Guangdong(null, Category.TYPE_ID + Category.NAME.key),
    droit(null, null),
    spéc(null, null),
    typographie(null, null),
    États_Unis(null, null),
    Shanxi(null, Category.TYPE_ID + Category.NAME.key),
    finance(null, Category.TYPE_ID + Category.ECONOMY.key),
    math(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    terme_emprunté(null, null),
    Alabama(null, Category.TYPE_ID + Category.NAME.key),
    Hunan(null, Category.TYPE_ID + Category.NAME.key),
    Italie(null, Category.TYPE_ID + Category.NAME.key),
    onom(null, null),
    Chine(null, Category.TYPE_ID + Category.NAME.key),
    Jiangxi(null, Category.TYPE_ID + Category.NAME.key),
    linguistique(null, null),
    Bible(null, Category.TYPE_ID + Category.RELIGION.key),
    Yunnan(null, Category.TYPE_ID + Category.NAME.key),
    Zhejiang(null, Category.TYPE_ID + Category.NAME.key),
    manga(null, Category.TYPE_ID + Category.HOBBY.key),
    nom_d_une_rivière(null, Category.TYPE_ID + Category.NAME.key),
    pays(null, Category.TYPE_ID + Category.NAME.key),
    radical(null, null),
    vêtement(null, Category.TYPE_ID + Category.COSMETICS.key),
    Hubei(null, Category.TYPE_ID + Category.NAME.key),
    OTAN(null, null),
    genre(null, null),
    géologie(null, Category.TYPE_ID + Category.GEOGRAPHY.key),
    médecine(null, Category.TYPE_ID + Category.MEDICINE.key),
    n_m(null, WordType.TYPE_ID + WordType.NOUN.key),
    botanique(null, Category.TYPE_ID + Category.PLANTS.key),
    jeu_vidéo(null, Category.TYPE_ID + Category.MEDIA.key),
    série_télévisée(null, Category.TYPE_ID + Category.MEDIA.key),
    économie(null, Category.TYPE_ID + Category.ECONOMY.key),
    argot(null, Usage.TYPE_ID + Usage.FAMILIAR.key),
    géométrie(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    région(null, Category.TYPE_ID + Category.NAME.key),
    Belgique(null, Category.TYPE_ID + Category.NAME.key),
    Can(null, null),
    Shaanxi(null, Category.TYPE_ID + Category.NAME.key),
    grammaire(null, null),
    journal(null, null),
    ancien(null, null),
    couleur(null, Category.TYPE_ID + Category.ARTS.key),
    empereur(null, Category.TYPE_ID + Category.PEOPLE.key),
    ethnie(null, null),
    ONU(null, Category.TYPE_ID + Category.POLITICS.key),
    Sichuan(null, Category.TYPE_ID + Category.NAME.key),
    peuple(null, Category.TYPE_ID + Category.PEOPLE.key),
    roman(null, null),
    Californie(null, Category.TYPE_ID + Category.NAME.key),
    biologie(null, Category.TYPE_ID + Category.BIOLOGY.key),
    se(null, null),
    unité(null, null),
    Henan(null, Category.TYPE_ID + Category.NAME.key),
    plante(null, Category.TYPE_ID + Category.PLANTS.key),
    anatomie(null, Category.TYPE_ID + Category.MEDICINE.key),
    entreprise(null, Category.TYPE_ID + Category.NAME.key),
    Taiwan(null, Category.TYPE_ID + Category.NAME.key),
    chimie(null, Category.TYPE_ID + Category.CHEMISTRY.key),
    nf(null, WordType.TYPE_ID + WordType.NOUN.key),
    parfois(null, null),
    nom(null, Category.TYPE_ID + Category.NAME.key),
    Hebei(null, Category.TYPE_ID + Category.NAME.key),
    Fce(null, null),
    s(null, null),
    département(null, Category.TYPE_ID + Category.NAME.key),
    fleuve(null, Category.TYPE_ID + Category.NAME.key),
    physique(null, Category.TYPE_ID + Category.PHYSICS.key),
    mythologie(null, Category.TYPE_ID + Category.MYTHOLOGY.key),
    province(null, Category.TYPE_ID + Category.NAME.key),
    rivière(null, Category.TYPE_ID + Category.NAME.key),
    gén(null, Category.TYPE_ID + Category.MILITARY.key),
    musique(null, Category.TYPE_ID + Category.MUSIC.key),
    etc(null, null),
    langue(null, Category.TYPE_ID + Category.LITERATURE.key),
    constellation(null, Category.TYPE_ID + Category.BUILDING.key),
    ville(null, Category.TYPE_ID + Category.NAME.key),
    mathématiques(null, Category.TYPE_ID + Category.MATHEMATICS.key),
    informatique(null, Category.TYPE_ID + Category.SOFTWARE.key),
    nm(null, WordType.TYPE_ID + WordType.NOUN.key),
    film(null, Category.TYPE_ID + Category.MEDIA.key),
    lune(null, null),
    nom_de_famille(null, Category.TYPE_ID + Category.PEOPLE.key),
    prop(null, null),
    expression_idiomatique(null, null), ;
    private final String attrs;
    private final String value;

    CategoryImpl(final String value, final String attrs) {
      this.value = value;
      this.attrs = attrs;
    }

    @Override
    public String getAttributes() {
      return this.attrs;
    }

    @Override
    public String getReplacement() {
      return this.value;
    }

    @Override
    public String getConstantName() {
      return Helper.toConstantName(this.name());
    }
  }
}
